扣回BaseStrategy重點功能
External Functions
increasePoolAmount: 允許Allo合約增加池的金額。
registerRecipient: 註冊接收者的應用程序並更新其狀態。
allocate: 根據提供的數據為接收者分配代幣。
distribute: 根據提供的數據向接收者分發代幣。
getPayouts: 檢索接收者和數據對的支付摘要。
isValidAllocator: 驗證地址是否為有效的分配器。
Internal Functions
_setPoolActive: 設置池的活動狀態。
_isPoolActive: 檢查池是否目前處於活動狀態。
_isValidAllocator: 驗證地址為有效的分配器。
_registerRecipient: 註冊接收者的應用程序並更新其狀態。
_allocate: 根據提供的數據為接收者分配代幣。
_distribute: 根據提供的數據向接收者分發代幣。
_getPayout: 檢索接收者和數據對的支付摘要。
_getRecipientStatus: 檢索接收者的狀態。策略可以選擇擁有其狀態,只要它返回IStrategy.Status。
有根據不同角色做更多的定義:
Recipient受款項目
totalVotesReceived (uint256):接收者收到的總票數
useRegistryAnchor (bool):接收者是否使用註冊Anchor合約
recipientAddress (address):接收者的地址
recipientStatus (InternalRecipientStatus):接收者的狀態
metadata (Metadata):元數據詳細信息
Allocator分配者
voiceCredits (uint256):分配者的總聲量點數
voiceCreditsCastToRecipient (mapping(address => uint256)):分配者向接收者投放的聲量點數
function _qv_allocate(
Allocator storage _allocator,
Recipient storage _recipient,
address _recipientId,
uint256 _voiceCreditsToAllocate,
address _sender
) internal onlyActiveAllocation {
// check the `_voiceCreditsToAllocate` is > 0
if (_voiceCreditsToAllocate == 0) revert INVALID();
// get the previous values
uint256 creditsCastToRecipient = _allocator.voiceCreditsCastToRecipient[_recipientId];
uint256 votesCastToRecipient = _allocator.votesCastToRecipient[_recipientId];
// get the total credits and calculate the vote result
uint256 totalCredits = _voiceCreditsToAllocate + creditsCastToRecipient;
uint256 voteResult = _sqrt(totalCredits * 1e18);
// update the values
voteResult -= votesCastToRecipient;
totalRecipientVotes += voteResult;
_recipient.totalVotesReceived += voteResult;
_allocator.voiceCreditsCastToRecipient[_recipientId] += totalCredits;
_allocator.votesCastToRecipient[_recipientId] += voteResult;
// emit the event with the vote results
emit Allocated(_recipientId, voteResult, _sender);
}
function _sqrt(uint256 x) internal pure returns (uint256 y) {
uint256 z = (x + 1) / 2;
y = x;
while (z < y) {
y = z;
z = (x / z + z) / 2;
}
}
有針對QV機制更多的參數,例如
分配者管理
pool manager可以添加或刪除分配者,使他們能夠為接收項目分配聲量點數。
添加分配者允許他們參與分配過程。
刪除分配者將撤銷他們分配聲量點數的能力。
投票分配
分配者可以根據平方投票算法為特定接收者分配聲量點數。
maxVoiceCreditsPerAllocator限制了分配者可以分配的聲量點數總數。
聲量點數用於影響接收者的累積投票。
接收者接受
接收者必須根據內部狀態被接受才有資格進行投票分配。
合約在允許分配之前檢查接收者的狀態是否被接受。